package 把二叉树打印成多行;
//题目描述
//从上到下按层打印二叉树，同一层结点从左至右输出。每一层输出一行。
import java.util.ArrayList;
import java.util.LinkedList;
public class Solution
{
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot)
    {
        //判断输入
        ArrayList<ArrayList<Integer>> integers = new ArrayList<>();
        if (pRoot==null)
            return integers;

        LinkedList<TreeNode> treeNodes = new LinkedList<>();
        //把根节点放进队列，然后每次从队列中取出一个节点打印，如果这个节点有子节点，就把他的子节点放入队尾
        treeNodes.offer(pRoot);
        //判断同一层节点，每一层出队开始前，计算队列的长度size，然后循环size次进行出队操作
        while (!treeNodes.isEmpty())
        {
            ArrayList<Integer> list=new ArrayList<>();
            int size=treeNodes.size();
            for (int i = 0; i < size; i++)
            {
                TreeNode temp= treeNodes.poll();
                int p = temp.val;
                list.add(p);
                if (temp.left!=null)
                    treeNodes.offer(temp.left);
                if (temp.right!=null)
                    treeNodes.offer(temp.right);
            }
            integers.add(list);
        }
        return integers;
    }
}
